The present invention relates to computer subsystems. More particularly, the present invention relates to a method and apparatus for communicating with one or more computer subsystems via a platform-independent communication protocol.
The need for increasingly powerful computer subsystems has mandated the development of increasingly sophisticated computer peripheral devices to off-load tasks from the host computer's central processing unit (CPU). Examples include storage subsystems, graphics controllers, and network interface controllers, among others. Because such subsystems are often critical to the host system's performance, the transfer of information between the CPU and its subsystems should incur as little overhead as reasonably possible. Further, it is preferable to maintain simplicity in the hardware used to communicate between the CPU and the subsystem, both for reasons of cost and reliability. Finally, a flexible approach which is not dependent on specific features of the given computing platform or operating system (OS) is also desirable.
When designing a controller for a computer subsystem (e.g., an intelligent small computer systems interface (SCSI) controller for a storage subsystem), it is thus generally desirable to offer the capability to communicate with that subsystem in a manner that meets the foregoing criteria. For example, this might take the form of controlling/configuring various features of the subsystem by sending commands from the host computer. The ability to monitor the health and/or performance of the subsystem from the host is also often desired.
Using the intelligent SCSI subsystem as an example, it can be seen that historically, the foregoing types of vendor-unique features have been implemented using some non-standard SCSI commands (e.g., Send Diagnostic and Receive Diagnostic commands). This approach, while straightforward, forces a software implementation of such functionality that is highly host-dependent. Moreover, the way in which an application program requests a SCSI driver to send these types of vendor-unique commands is in no way standardized in the industry. Therefore, new driver software modules must repeatedly written and re-written for the many different platforms and OSs commonly in use today. This repeated effort is a drain on the resources of those creating such software applications.
What is therefore desirable is a method and apparatus which permits an application program to communicate with a computer subsystem without the use of driver software written especially for supporting communications on a specific platform.